import { mapGetters } from 'vuex'
// 分页操作
export const pageCommon = {
  data () {
    return {
      pageSizeArray: [10, 20, 30, 40, 50],
      pageNo: 1,
      pageSize: 10,
      pageTotal: null,
      loadingList: false,
      total: 0,
      isFirstdata: false,
      isShowPage: true
    }
  },
  created () {
    if (!this.noReadayLoading) {
      this.searchBtn()
    }
  },
  watch: {
    pageSize (newVal, oldVal) {
      if (this.pageTotal > newVal) {
        this.searchBtn()
        return false
      }
      if (this.pageTotal < oldVal) {
        return false
      }
      this.searchBtn()
    },
    total (val) {
      if (val === 1) {
        this.isShowPage = false
      } else {
        this.isShowPage = true
      }
    }
  },
  methods: {
    // 修改每页显示的数据数目
    handleSizeChange (val) {
      this.pageSize = val
    },
    // 设置pageNo
    handleCurrentChange (val) {
      this.pageNo = val
      this.searchBtn()
    },
    // 查看数据api
    searchBtn () {
      console.log('pageSize')
      console.log(this.pageSize)
      this.$axios.post(this.apiUrl, this.apiParams).then(response => {
        let res = response.data
        let result
        if (this.isFirstdata) {
          result = res.data
        } else {
          result = res.data.results
        }
        if (res.code === '00000000') {
          if (result === undefined || result === null) {
            this.setAccountList([])
          } else {
            this.total = res.total
            this.setAccountList(result)
          }
        } else {
          this.$message.error(res.message)
        }
      }).catch(() => {
        this.$message.error('网络错误，刷新下试试')
      })
    }
  }
}
// 不带分页通用请求基础datas
export const basicGetList = {
  methods: {
    basicGetList () {
      this.$axios
        .post(this.apiUrl, this.apiParams)
        .then(response => {
          let res = response.data
          if (res.code === '00000000') {
            if (res.data.datas === undefined) {
              this.setAccountList([])
            } else {
              this.setAccountList(res.data.datas)
            }
          } else {
            this.$message.error(res.message)
          }
        })
        .catch(() => {
          this.$message.error('网络错误，刷新下试试')
        })
    }
  }
}
// 不带分页通用请求 可复用datas
export const commonGetList = {
  // 查看数据api
  methods: {
    commonGetList (apiUrl, apiParams) {
      return new Promise((resolve, reject) => {
        this.$axios
          .post(apiUrl, apiParams)
          .then(response => {
            let res = response.data
            if (res.code === '00000000') {
              if (res.data.datas === undefined || res.data.datas === null) {
                resolve([])
              } else {
                resolve(res.data.datas)
              }
            } else {
              this.$message.error(res.message)
            }
          })
          .catch(err => {
            reject(err)
            this.$message.error('网络错误，刷新下试试')
          })
      })
    }
  }
}
// data通用
export const getData = {
  // 查看数据api
  methods: {
    getData (apiUrl, apiParams) {
      return new Promise((resolve, reject) => {
        this.$axios
          .post(apiUrl, apiParams)
          .then(response => {
            let res = response.data
            if (res.code === '00000000') {
              if (res.data === undefined || res.data === null) {
                resolve([])
              } else {
                resolve(res.data)
              }
            } else {
              this.$message.error(res.message)
            }
          })
          .catch(err => {
            reject(err)
            this.$message.error('网络错误，刷新下试试')
          })
      })
    }
  }
}
// 分页
// 分页操作
export const pageCommonOther = {
  data () {
    return {
      pageSizeArray: [10, 20, 30, 40, 50],
      pageNo: 1,
      pageSize: 10,
      pageTotal: null,
      loadingList: false,
      total: 0,
      isFirstdata: false
    }
  },
  created () {
    if (!this.noReadayLoading) {
      this.getList()
    }
  },
  watch: {
    pageSize (newVal, oldVal) {
      if (this.pageTotal > newVal) {
        this.getList()
        return false
      }
      if (this.pageTotal < oldVal) {
        return false
      }
      this.getList()
    }
  },
  methods: {
    // 修改每页显示的数据数目
    handleSizeChange (val) {
      this.pageSize = val
    },
    // 设置pageNo
    handleCurrentChange (val) {
      this.pageNo = val
      this.getList()
    },
    // 查看数据api
    getList () {
      this.$axios.post(this.apiUrl, this.apiParams).then(response => {
        let res = response.data
        // console.log(res, 1)
        if (res.code === '200') {
          if (res.data === undefined || res.data === null) {
            this.setAccountList([])
          } else {
            // this.total = res.data.total
            this.setAccountList(res.data)
          }
        } else {
          this.$message.error(res.message)
        }
      })
        .catch(() => {
          this.$message.error('网络错误，刷新下试试')
        })
    }
  }
}
// 冻结 解冻

// export const changeStatu = {
//   data () {
//     return {
//       dialogVisible: false,
//       visible: false,
//       remark: ''
//     }
//   },
//   // 查看数据api
//   methods: {
//     // 冻结
//     freeze (val) {
//       this.dialogVisible = true
//       this.id = val
//     },
//     // 解冻
//     thaw (val) {
//       this.visible = true
//       this.id = val
//     },
//     // 确认冻结
//     freezeBtn () {
//       if (this.remark !== '') {
//         if (this.remark !== '' || this.remark !== null) {
//           this.$axios
//             .post(this.apiFreezeUrl, this.apiFreezeApi)
//             .then(response => {
//               let res = response.data
//               if (res.code === '200') {
//                 this.dialogVisible = false
//                 this.$message({
//                   message: '操作成功',
//                   type: 'success',
//                   onClose: () => {
//                     this.getList()
//                   }
//                 })
//               } else {
//                 this.$message.error(res.message)
//               }
//             })
//             .catch(() => {
//               this.$message.error('网络错误，刷新下试试')
//             })
//         }
//       } else {
//         this.$message.error('请输入冻结原因再提交')
//       }
//     },
//     // 确认解冻
//     thawBtn () {
//       this.$axios
//         .post(this.apiFreezeUrl, this.apiFreezeApi)
//         .then(response => {
//           let res = response.data
//           if (res.code === '200') {
//             this.visible = false
//             this.$message({
//               message: '操作成功',
//               type: 'success',
//               onClose: () => {
//                 this.getList()
//               }
//             })
//           } else {
//             this.$message.error(res.message)
//           }
//         })
//         .catch(() => {
//           this.$message.error('网络错误，刷新下试试')
//         })
//     }
//   }
// }

// 角色公用函数
export const roleDetail = {
  data () {
    return {
      menuData: null,
      menuProps: {
        children: 'List',
        label: 'NAME'
      },
      preRoleName: '',
      roleName: '',
      roleIdArr: []
    }
  },
  computed: {
    ...mapGetters(['userInfo'])
  },
  methods: {
    // 根据角色ID显示其菜单权限树
    getAllTreeById (roleId) {
      this.$axios
        .post('/jt/platform/getMenuLimitsTreeByRoleId', {
          roleId: roleId,
          userId: this.userInfo.userId
        })
        .then(response => {
          let res = response.data
          if (res.code === '200') {
            this.setAllTree(res.data)
          }
        })
        .catch(error => {
          console.log(error)
        })
    },
    // 获得角色信息
    getRoleById (roleId) {
      this.$axios
        .post('/jt/platform/getRoleInfoById', {
          roleId: roleId
        })
        .then(response => {
          let res = response.data
          if (res.code === '200') {
            this.setRoleById(res.data)
          }
        })
        .catch(error => {
          console.log(error)
        })
    },
    // 获得编辑角色数据
    getRole (roleId) {
      this.$axios
        .post('platform/findRoleMenuLimitsTreeByRoleId', {
          roleId: roleId
        })
        .then(response => {
          let res = response.data
          if (res.code === '200') {
            this.setRoleState(res)
          }
        })
        .catch(error => {
          console.log(error)
        })
    },
    // 根据菜单id获取权限列表
    getAllMenu () {
      this.$axios
        .get('platform/getAllMenuValidInfoList')
        .then(response => {
          let res = response.data
          if (res.code === '200') {
            this.menuData = [...res.data]
          }
        })
        .catch(error => {
          console.log(error)
        })
    },
    // 根据角色id查询角色名
    getRoleName (roleId) {
      this.$axios
        .post('platform/findRoleMenuLimitsTreeByRoleId', {
          roleId: roleId
        })
        .then(response => {
          let res = response.data
          if (res.code === '200') {
            this.setRoleState(res)
          }
        })
        .catch(error => {
          console.log(error)
        })
    },
    // 所有数据
    setAllTree (res) {
      // 设置所有数据
      this.menuData = [...[res['ALL']]]
      let userRole = res.PART
      this.setAllId(userRole.List)
    },
    // 获得当前所拥有的权限
    setAllId (allId) {
      if (allId && allId.length >= 1) {
        console.log(allId)
        for (let item of allId) {
          this.roleIdArr.push(item.ID)
          if (item.List && item.List.length >= 1) {
            this.setAllId(item.limitList)
          }
        }
      }
      console.log(this.roleIdArr)
    },
    getAllId () {
      let nodes = this.$refs.treeBox.getCheckedNodes()
      let arr = []
      let otherArr = []
      for (let item of nodes) {
        if (item.tag === 'limit') {
          if (arr.length === 0) {
            console.log(item)
            arr.push({
              menuId: item.menuId,
              limitList: [item.ID]
            })
          } else {
            // console.log(item)
            let flag = true
            for (let a of arr) {
              if (a.menuId === item.menuId) {
                a.limitList.push(item.ID)
                flag = false
                break
              }
            }
            if (flag) {
              arr.push({
                menuId: item.menuId,
                limitList: [item.ID]
              })
            }
          }
        } else {
          if (item.List && item.List.length === 0) {
            otherArr.push({
              menuId: item.ID,
              limitList: []
            })
          }
        }
      }
      let allArr = [...arr, ...otherArr]
      return allArr
    }
  }
}
// 上传公用函数
// <el-upload class="avatar-uploader" :data="{funName:'setProductMainImg',params:scope}" action="" :show-file-list="false" :http-request="uploadImg" :before-upload="beforeUpload">
export const uploadImgMixin = {
  data () {
    return {
      uploadImgUrl: '/api/file/uploadImg'
    }
  },
  methods: {
    // 自定义上传图片
    uploadImg (a) {
      let callbackName = a.data['funName']
      let params = a.data.params
      let formdata = new FormData()
      formdata.append('items', a.file)
      let config = {
        headers: {
          'Content-Type': 'multipart/form-data'
        }
      }
      this.$axios.post(this.uploadImgUrl, formdata, config).then((response) => {
        let res = response.data
        if (res.code === '00000000') {
          console.log(res.url)
          this[callbackName](params, res.data.url)
        } else {
          this.$message({
            message: '图片上传不成功',
            type: 'warning'
          })
        }
      })
    },
    handleImageAdded (file, Editor, cursorLocation) {
      let config = {
        headers: {
          'Content-Type': 'multipart/form-data'
        }
      }
      let formdata = new FormData()
      formdata.append('items', file)
      this.$axios.post(this.uploadImgUrl, formdata, config).then((response) => {
        console.log(response)
        let data = JSON.parse(response.data.data)
        let url = data.imgUrl
        Editor.insertEmbed(cursorLocation, 'image', url)
      })
    },
    // 上传之前做判断
    beforeUpload (file) {
      const isJPG = file.type === 'image/jpeg' || file.type === 'image/png' || file.type === 'image/jpg'
      const isLt2M = file.size / 1024 / 1024 < 5

      if (!isJPG) {
        this.$message.error('上传头像图片只能是 JPG,jpeg,png 格式!')
      }
      if (!isLt2M) {
        this.$message.error('上传图片大小最大为5M')
      }
      return isJPG && isLt2M
    }
  }
}
// 获得搜索时候所需要的三级类目
// export const getCategory = {
//   data () {
//     return {
//       oneCateroryData: [],
//       twoCateroryData: [],
//       threeCateroryData: [],
//       oneCategory: '',
//       twoCategory: '',
//       threeCategory: ''
//     }
//   },
//   created () {
//     this.getOneCategory()
//   },
//   methods: {
//     // 获得一级类目
//     getOneCategory () {
//       this.$axios.post('platform/findFirstLevMgCategoryPage', {
//         pageNo: '1',
//         pageSize: '100'
//       }).then((response) => {
//         let res = response.data
//         if (res.code === '200') {
//           this.setCategory(res.data.datas, 1)
//           console.log(res.data.datas)
//         }
//       }).catch((error) => {
//         console.log(error)
//       })
//     },
//     // 一级类目改变加载二级类目
//     oneCategoryChange (val) {
//       this.twoCateroryData = []
//       this.threeCateroryData = []
//       this.getTwoAndThreeCategory(val, 2)
//     },
//     // 根据id与状态获得下级类目
//     getTwoAndThreeCategory (id, state) {
//       this.$axios.post('platform/findLowerlevelMkCategoryListByPid', {
//         id: id
//       }).then((response) => {
//         let res = response.data
//         if (res.code === '200') {
//           if (res.data.length === 0) {
//             return false
//           }
//           if (state === 2) {
//             this.setCategory(res.data.datas, 2)
//           } else {
//             this.setCategory(res.data.datas, 3)
//           }
//         }
//       }).catch((error) => {
//         console.log(error)
//       })
//     },
//     // 二级类目变化，加载三级类目
//     twoCategoryChange (val) {
//       this.threeCateroryData = []
//       this.getTwoAndThreeCategory(val, 3)
//     },
//     // 设置类目数据
//     setCategory (data, state) {
//       let cateroryData = []
//       for (let item of data) {
//         cateroryData.push({
//           label: item.name,
//           value: item.id
//         })
//       }
//       if (state === 1) {
//         this.oneCateroryData = [...cateroryData]
//       } else if (state === 2) {
//         this.twoCateroryData = [...cateroryData]
//       } else {
//         this.threeCateroryData = [...cateroryData]
//       }
//     }
//   }
// }
// // 获得专业公司所有数据
// export const getCompanyDate = {
//   data () {
//     return {
//       conpanyInfo: []
//     }
//   },
//   created () {
//     this.getCompanyInfo()
//   },
//   methods: {
//     // 获得专业公司数据
//     getCompanyInfo () {
//       this.$axios.post('platform/findCompanyPage', {
//         pageNo: '1',
//         pageSize: '100'
//       }).then((response) => {
//         let res = response.data
//         if (res.code === '200') {
//           this.setCompanyDate(res.data.datas)
//         } else {
//           console.log('错误提示')
//         }
//       }).catch((error) => {
//         console.log(error)
//       })
//     },
//     // 设置专业公司数据
//     setCompanyDate (data) {
//       let conpanyInfo = []
//       for (let item of data) {
//         conpanyInfo.push({
//           label: item.emplName,
//           value: item.id
//         })
//       }
//       this.conpanyInfo = [...conpanyInfo]
//     }
//   }
// }
